/*
 * ==================================================================
 * Pardal - Framework for Classification Hierarchical and Multilabel.
 * ==================================================================
 * 
 * Copyright (C) 2013-2014 
 *  Valdigleis da Silva Costa
 *  Araken Medeiros Santos
 *  Daniel Sabino Amorim de Araujo
 *
 *  Departamento de Ciências Exatas, Tecnologicas e Humanas (DCETH) 
 *  Grupo de Inteligência Computacionais de Angicos (GICA)
 *  Campus Angicos (CA)
 *  Universidade Federal Rural do Semi-árido (UFERSA)
 *
 *  Project Info: (Site em desenvolvimento)
 * 
 * Framework Pardal is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * Framework Pardal is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 * 
 * ==================================================================
 * Pardal - Framework para Classificação Hierárquica e Multirrótulo.
 * ==================================================================
 * 
 * Copyright (C) 2013-2014 
 *  Valdigleis da Silva Costa
 *  Araken Medeiros Santos
 *  Daniel Sabino Amorim de Araujo
 *
 *  Departamento de Ciências Exatas, Tecnologicas e Humanas (DCETH) 
 *  Grupo de Inteligência Computacionais de Angicos (GICA)
 *  Campus Angicos (CA)
 *  Universidade Federal Rural do Semi-árido (UFERSA)
 *
 * Informações sobre o projeto: (Site em Desenvolvimento)
 * 
 * O Framework Pardal é um software livre; você pode redistribui-lo e/ou
 * modifica-lo dentro dos termos da Licença Pública Geral GNU como 
 * publicada pela Fundação do Software Livre (FSF); na versão 2 da 
 * Licença, ou (na sua opnião) qualquer versão.
 * 
 * O Framework Pardal é distribuido na esperança que possa ser util, 
 * mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO
 * a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU para maiores detalhes.
 * 
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU
 * junto com este programa, se não, escreva para a Fundação do Software
 * Livre(FSF) Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

package pardal.gica.gui;

import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

/**
 * Classe que implementa a janela principal do programa.
 * 
 * @version 1.0
 * @author Valdigleis
 */
public class WindowStarter extends javax.swing.JFrame {
    
    //variaveis da janela principal.
    private JMenuBar        menuBar;                //variavel que é a barra de menu.
    private JMenu           menu_HELP;              //variavel que é o menu Help.
    private JMenuItem       menuItem_About;         //variavel que é a opção sobre do menu.
    private JMenuItem       menuItem_Exit;          //variavel que é a opção sair do menu.
    private JLabel          label_Hierarchic;       //variavel que é o label para marcar os modulos para Classificação Hierarquica.
    private JLabel          label_Multilabel;       //variavel que é o label para marcar os modulos para Classificação Multirótulo.
    private JButton         button_HMLP;            //variavel que é o botão para o classificador HMLP.
    private JButton         button_HMC;             //variavel que é o botão para o classificador HMC.
    private JButton         button_HBR;             //variavel que é o botão para o classificador HBR.
    
    private JLabel          name_universidad;       //variavel que é o label para o nome da universidade.
    private JLabel          name_departament;       //variavel que é o label para o nome do departamento.
    private JLabel          name_group;             //variavel que é o label para o nome do grupo.
    private JLabel          name_campus;            //variavel que é o label para o nome do campus.
   
    private JLabel          image;                  //variavel que vai guarda o background da tela inicial.
    /**
     * Método construtor da Classe WindowMain.
     */
    public WindowStarter() {

        initComponts();

    }
    
    private void initComponts(){
        
        //incializando os componentes que irão compor a janela.
        this.menuBar = new JMenuBar();
        this.menu_HELP = new JMenu("Ajuda");
        this.menuItem_About = new JMenuItem("sobre");
        this.menuItem_Exit = new JMenuItem("sair");
        this.label_Hierarchic = new JLabel("Classificação Hierárquica");
        this.label_Hierarchic.setFont(new Font("Arial", Font.BOLD, 12));
        this.label_Multilabel = new JLabel("Classificação Multirrótulo");
        this.label_Multilabel.setFont(new Font("Arial", Font.BOLD, 12));
        
        this.button_HMLP = new JButton("HMLP");
        this.button_HMC = new JButton("HMC");
        this.button_HBR = new JButton("HBR");
        
        this.name_universidad = new JLabel("UFERSA - Universidade Federal Rural do Semi-árido");
        this.name_universidad.setFont(new Font("Arial", Font.BOLD, 12));
        this.name_departament = new JLabel("DCETH - Departamento de Ciências Exatas, Tecnológicas e Humanas");
        this.name_departament.setFont(new Font("Arial", Font.BOLD, 12));
        this.name_group = new JLabel("GICA - Grupo de Inteligência Computacional de Angicos");
        this.name_group.setFont(new Font("Arial", Font.BOLD, 12));
        this.name_campus = new JLabel("Campus Angicos");
        this.name_campus.setFont(new Font("Arial", Font.BOLD, 12));
        
                
        //seta os paramentos da janela.
        this.setTitle("Pardal");
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);
        getContentPane().setLayout(null);
        setSize(600, 345);
        setLocationRelativeTo(null);
        URL url = this.getClass().getResource("/pardal/resource/icon2.png");  
        Image icon = Toolkit.getDefaultToolkit().getImage(url);
        setIconImage(icon);
        
        //seta os paramentros dos componentes.
        this.menuItem_About.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_H, java.awt.event.InputEvent.ALT_MASK));
        this.menuItem_About.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                About_ActionPerformed(evt);
            }
        });
        this.menuItem_About.setToolTipText("Opção que contém informações básica do software");
        this.menuItem_Exit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, java.awt.event.InputEvent.ALT_MASK));
        this.menuItem_Exit.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Exit_ActionPerformed(evt);
            }
        });
        this.menuItem_Exit.setToolTipText("Opção de sair e fechar o software");
        this.menu_HELP.add(this.menuItem_About);
        this.menu_HELP.add(this.menuItem_Exit);
        this.menu_HELP.setToolTipText("Menu de ajuda básico");
        this.menuBar.add(this.menu_HELP);
        this.label_Hierarchic.setBounds(415, 0, 180, 50);
        this.label_Multilabel.setBounds(35, 0, 180, 50);
        
        //seta configurações dos botões
        this.button_HMLP.setBounds(400,35, 180, 35);
        this.button_HMLP.setToolTipText("Inicia o módulo de configuração do método HMLP.");
        this.button_HMLP.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                //BagginWindowConfigBase base = new BagginWindowConfigBase("Bagging");
                openModuloHIERARCHICAL(1);
            }
        });
        
        this.button_HMC.setBounds(400,85, 180, 35);
        this.button_HBR.setBounds(400,135, 180, 35);
        
        
        //seta configuração dos labels
        this.name_universidad.setBounds(245, 195, 300, 50);
        this.name_departament.setBounds(198, 210, 400, 50);
        this.name_group.setBounds(235, 225, 400, 50);
        this.name_campus.setBounds(335, 240, 250, 50);
        
        
        //fundo da tela
        this.image = new JLabel();
        this.image.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pardal/resource/pardal.png")));
        this.image.setBounds(0, -45, 600, 345);
        
        //Seta componentes na janela
        
        setJMenuBar(this.menuBar);
        getContentPane().add(this.label_Hierarchic);
        //getContentPane().add(this.label_Multilabel);
        getContentPane().add(this.button_HMLP);
        getContentPane().add(this.button_HMC);
        getContentPane().add(this.button_HBR);
        getContentPane().add(this.name_universidad);
        getContentPane().add(this.name_departament);
        getContentPane().add(this.name_group);
        getContentPane().add(this.name_campus);
        getContentPane().add(this.image);
        
        
    }
    
    
    /**
     * Método que dispara a ação do item sair no menu principal.
     * @param evt Evento de click ou tecla de atalho alt+F4.
     */
    private void Exit_ActionPerformed(java.awt.event.ActionEvent evt){
        System.exit(0);
    }
    
    /**
     * Método que dispara a ação do item sobre no menu principal.
     * @param evt Evento de click ou tecla de atalho alt+H.
     */
    private void About_ActionPerformed(java.awt.event.ActionEvent evt){
        System.out.println("Esta ok o botão e o atalho do sobre!");
    }
    
    
    private void openModuloHIERARCHICAL(int i){
        //this.setExtendedState(ICONIFIED);
        HierarquicSelection hierarquicSelection = new HierarquicSelection(i);
    }
    
    /**
     * Método que starta a execução do programa.
     * @param args Paramento de entrada que passa os argumentos necessarios ao
     * sistema.
     */
    public static void main(String args[]){
        
        //Cria a janela de execução do programa.
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                
                //Seta o Nimbus como estilo padrão do programa e captura os devidos erros.
                try {
                    for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                        if ("Nimbus".equals(info.getName())) {
                            javax.swing.UIManager.setLookAndFeel(info.getClassName());
                            break;
                        }
                    }
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
                    java.util.logging.Logger.getLogger(WindowStarter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
                }
                //roda a aplicação
                new WindowStarter().setVisible(true);
            }
        });
    }

}
